<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Agp\CoreBundle\Entity\ContaBancaria
 *
 * @ORM\Table(name="conta_bancaria")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\ContaBancariaRepository")
 * @ORM\HasLifecycleCallbacks
 */
class ContaBancaria
{
    /**
     * @var integer $codContaBancaria
     *
     * @ORM\Column(name="cod_conta_bancaria", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $codContaBancaria;
    
    /**
     * @var string $descricao
     *
     * @ORM\Column(name="descricao", type="string", length=45)
     */
    protected $descricao;

    /**
     * @var string $agencia
     *
     * @ORM\Column(name="agencia", type="string", length=45)
     * @Assert\NotBlank()
     */
    protected $agencia;

    /**
     * @var string $conta
     *
     * @ORM\Column(name="conta", type="string", length=45)
     * @Assert\NotBlank()
     */
    protected $conta;

    /**
     * @var integer $digitoConta
     *
     * @ORM\Column(name="digito_conta", type="integer", nullable=true)
     * @Assert\NotBlank()
     * @Assert\Length(
     *      max= "1"
     * )
     */
    protected $digitoConta;

    /**
     * @var float $percentualIof
     *
     * @ORM\Column(name="percentual_iof", type="float", nullable=true)
     */
    protected $percentualIof;

    /**
     * @var string $codigoCedente
     *
     * @ORM\Column(name="codigo_cedente", type="string", length=20, nullable=true)
     */
    protected $codigoCedente;

    /**
     * @var string $carteira
     *
     * @ORM\Column(name="carteira", type="string", length=45, nullable=true)
     */
    protected $carteira;

    /**
     * @var string $modalcodContaBancariaade
     *
     * @ORM\Column(name="modalidade", type="string", length=45, nullable=true)
     */
    protected $modalidade;

    /**
     * @var string $convenio
     *
     * @ORM\Column(name="convenio", type="string", length=45, nullable=true)
     */
    protected $convenio;
    
    /**
     * @ORM\ManyToOne(targetEntity="Banco", cascade={"persist"}, fetch="LAZY")
     * @ORM\JoinColumn(name="cod_banco", referencedColumnName="cod_banco", onDelete="restrict")
     * @var object
     */
    protected $banco;
    
    /**
     * @ORM\ManyToOne(targetEntity="Agp\CoreBundle\Entity\Empresa", cascade={"persist"}, fetch="LAZY")
     * @ORM\JoinColumn(name="cod_empresa", referencedColumnName="cod_empresa", onDelete="cascade", nullable=true)
     * @var object
     */
    protected $empresa;
    
    /**
     * @ORM\ManyToOne(targetEntity="Agp\CoreBundle\Entity\Pessoa", cascade={"persist"}, fetch="LAZY")
     * @ORM\JoinColumn(name="cod_pessoa", referencedColumnName="cod_pessoa", onDelete="cascade", nullable=true)
     * @var object
     */
    protected $pessoa;
    
    const TIPO_PESSOA = 'pessoa';
    const TIPO_EMPRESA = 'empresa';

    /**
     * @ORM\Column(type="string", length=45, nullable=false)
     * @var type string
     */
    protected $tipo;
    
    /**
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function prePersistUpdate(){
        if ($this->tipo == self::TIPO_EMPRESA){
            $this->pessoa = null;
        }
        
    }
    
    public function getDescricao() {
        return $this->descricao;
    }

    public function setDescricao($descricao) {
        $this->descricao = $descricao;
    }

    /**
     * Get codContaBancaria
     *
     * @return integer 
     */
    public function getCodContaBancaria()
    {
        return $this->codContaBancaria;
    }

    /**
     * Set agencia
     *
     * @param string $agencia
     * @return ContaBancaria
     */
    public function setAgencia($agencia)
    {
        $this->agencia = $agencia;
    
        return $this;
    }

    /**
     * Get agencia
     *
     * @return string 
     */
    public function getAgencia()
    {
        return $this->agencia;
    }

    /**
     * Set conta
     *
     * @param string $conta
     * @return ContaBancaria
     */
    public function setConta($conta)
    {
        $this->conta = $conta;
    
        return $this;
    }

    /**
     * Get conta
     *
     * @return string 
     */
    public function getConta()
    {
        return $this->conta;
    }

    /**
     * Set digitoConta
     *
     * @param integer $digitoConta
     * @return ContaBancaria
     */
    public function setDigitoConta($digitoConta)
    {
        $this->digitoConta = $digitoConta;
    
        return $this;
    }

    /**
     * Get digitoConta
     *
     * @return integer 
     */
    public function getDigitoConta()
    {
        return $this->digitoConta;
    }

    /**
     * Set percentualIof
     *
     * @param float $percentualIof
     * @return ContaBancaria
     */
    public function setPercentualIof($percentualIof)
    {
        $this->percentualIof = $percentualIof;
    
        return $this;
    }

    /**
     * Get percentualIof
     *
     * @return float 
     */
    public function getPercentualIof()
    {
        return $this->percentualIof;
    }

    /**
     * Set codigoCedente
     *
     * @param string $codigoCedente
     * @return ContaBancaria
     */
    public function setCodigoCedente($codigoCedente)
    {
        $this->codigoCedente = $codigoCedente;
    
        return $this;
    }

    /**
     * Get codigoCedente
     *
     * @return string 
     */
    public function getCodigoCedente()
    {
        return $this->codigoCedente;
    }

    /**
     * Set carteira
     *
     * @param string $carteira
     * @return ContaBancaria
     */
    public function setCarteira($carteira)
    {
        $this->carteira = $carteira;
    
        return $this;
    }

    /**
     * Get carteira
     *
     * @return string 
     */
    public function getCarteira()
    {
        return $this->carteira;
    }

    /**
     * Set convenio
     *
     * @param string $convenio
     * @return ContaBancaria
     */
    public function setConvenio($convenio)
    {
        $this->convenio = $convenio;
    
        return $this;
    }

    /**
     * Get convenio
     *
     * @return string 
     */
    public function getConvenio()
    {
        return $this->convenio;
    }
    
    public function getBanco() {
        return $this->banco;
    }

    public function setBanco($banco) {
        $this->banco = $banco;
    }

    public function getModalidade() {
        return $this->modalidade;
    }

    public function setModalidade($modalidade) {
        $this->modalidade = $modalidade;
    }
    
    public function getEmpresa() {
        return $this->empresa;
    }

    public function setEmpresa($empresa) {
        $this->empresa = $empresa;
    }

    public function getPessoa() {
        return $this->pessoa;
    }

    public function setPessoa($pessoa) {
        $this->pessoa = $pessoa;
    }
    
    public function getTipo() {
        return $this->tipo;
    }

    public function setTipo($tipo) {
        $this->tipo = $tipo;
    }

    public static function getTipoList(){
        return array(self::TIPO_EMPRESA => ucfirst(self::TIPO_EMPRESA),
                     self::TIPO_PESSOA => ucfirst(self::TIPO_PESSOA));
    }



}
